package com.tutos.model;

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.JoinTable;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.UniqueConstraint;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;

@Entity
@PrimaryKeyJoinColumn(name="id")
@NamedQueries({
	@NamedQuery(name="getAllMonitores", query="SELECT m FROM Monitor m"),
	@NamedQuery(name="getMonitorByCorreo", query="SELECT m FROM Monitor m WHERE m.correo =:correo")
})
public class Monitor extends Persona{
	
	private static final long serialVersionUID = 1L;
	
	@Column(name ="infoAcademica")
	private String infoAcademica;
	
	@Enumerated(EnumType.STRING)
	@Column(name ="calificacion")
	private Calificacion calificacion;
	
	@Column(name ="ubicacion")
	private String ubicacion;
	
	@ManyToMany(fetch = FetchType.LAZY)
	@JoinTable(name = "monitor_materia", joinColumns = @JoinColumn(name = "monitor"), inverseJoinColumns = @JoinColumn(name = "materia"), uniqueConstraints = @UniqueConstraint(columnNames = {
			"monitor", "materia" }))
	private List<Materia> materias;
	
	@OneToMany(mappedBy = "monitor")
	private List<Tutoria> tutorias; 
	
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, targetEntity = Evento.class)
	private List<Evento> horario;
	
	public List<Evento> getHorario() {
		return horario;
	}
	
	@OneToMany(mappedBy = "monitor")
	private List<CalificacionesEstudiante> calificacionesEstudiantes;

	public List<Tutoria> getTutorias() {
		return tutorias;
	}

	public void setTutorias(List<Tutoria> tutorias) {
		this.tutorias = tutorias;
	}

	public List<CalificacionesEstudiante> getCalificacionesEstudiantes() {
		return calificacionesEstudiantes;
	}

	public void setCalificacionesEstudiantes(
			List<CalificacionesEstudiante> calificacionesEstudiantes) {
		this.calificacionesEstudiantes = calificacionesEstudiantes;
	}

	public void setHorario(List<Evento> horario) {
		this.horario = horario;
	}

	public String getInfoAcademica() {
		return infoAcademica;
	}
	public void setInfoAcademica(String infoAcademica) {
		this.infoAcademica = infoAcademica;
	}
	public Calificacion getCalificacion() {
		return calificacion;
	}
	public void setCalificacion(Calificacion calificacion) {
		this.calificacion = calificacion;
	}
	public List<Materia> getMaterias() {
		return materias;
	}

	public void setMaterias(List<Materia> materias) {
		this.materias = materias;
	}

	public String getUbicacion() {
		return ubicacion;
	}
	public void setUbicacion(String ubicacion) {
		this.ubicacion = ubicacion;
	}
}
